iT邦幫忙

2023 iThome 鐵人賽

DAY 9
0
Cloud Native

2023 年了,一起來學 CDN - 你也可以瞭解的 CloudFront 系列 第 9

Day 09 - 決定就是你了 - ITHome鐵人賽觀賽區 就是我們的羅格鎮

  • 分享至 

  • xImage
  •  

羅格鎮,是航海王(One Piece)中,哥爾・D・羅傑激發大家出海願望的起點。看了一下 鐵人賽觀賽區 的頁面,剛好很合適,就讓我們以這為起點開始練習吧。

<<觀察>>
不同於鐵人賽的首頁,觀賽區是一個近乎獨立的存在。

  • 鐵人賽首頁: 在 iT邦幫忙
    https://ithelp.ithome.com.tw/upload/images/20230911/20162502QTuSfEyp7t.png
  • 鐵人賽觀賽區: 在 AWS S3(順便幫自己打個廣告)
    https://ithelp.ithome.com.tw/upload/images/20230911/20162502yHU2hf7bhi.png

這讓我們有機會可以將其轉透過 CloudFront 作為 CDN 呈現。
<<進一步觀察>>
知己知彼,百戰不殆。為了能成功達成目標,我們需要先瞭(ㄊㄡ)解(ㄎㄢ\)網站架構。
首先請出網站開發者的好朋友,「開發者模式」,然後載入一次頁面。將網站中需要的檔案找出來。
https://ithelp.ithome.com.tw/upload/images/20230911/20162502HXoyflHixp.png
進一步細看,來自 S3 (ithome-ironman-watcher.s3.ap-northeast-1.amazonaws.com) 的檔案有 7筆。

/2023/index.html
/2023/static/js/main.b12d5b59.js
/2023/static/css/main.0630633b.css
/2023/ui-data.json (透過 JS 發出 XHR 取回 )
/2023/favicon.ico
/2023/manifest.json
/2023/logo192.png

仔細檢查這幾個檔案,發現:

  • a. 這是 react.js (觀察 manifest.json 內容可知)
  • b. 僅有 ui-data.json 有設置 'max-age=300s',其它均沒有。
  • c. react.js 這類 js framework,特點是重新部署時,會產生新的 js/css 檔名, 現有版本main.b12d5b59.js,下一個版本可能是 main.c36123xa.js,也就是檔名不會重複。
  • d. 檔案均置放於 s3://ithome-ironman-watcher,可以直接將其視為 https://ithome-ironman-watcher.s3.ap-northeast-1.amazonaws.com 的來源網站。
  • e. 雖然有 XHR 請求,但回應中沒有見到 CORS 的回應標頭

<<開始設置>>

  1. 創建一組新的 CloudFront Distribution。(使用預設的我就不特別提)
- 將 Origin 設置為 ithome-ironman-watcher.s3.ap-northeast-1.amazonaws.com ; 
- Origin access: Public ;
- Viewer protocol policy: Redirect HTTP to HTTPS; 
- Redirect HTTP to HTTPS: GET, HEAD, OPTIONS
  1. 設定 "Cache key and origin requests",手動設定一組新的 Policy,選擇新創的 CachingPolicy
Path Pattern: Default(*)
TTL: min/max/default 均設置為 300。 
Header: 不轉發
QueryStrings: 不轉發
Cookies: 不轉發 (當源站是 S3 時,因為一般來說,S3 不會因為送入 Cookie 不同而有不同回應。)
  1. (optional) 新增 CNAME & 選定 TLS 憑證。
CNAME: 2023ironman-watch.kgg23.com 
  1. 開啟日誌(開日誌是好習慣)
  2. 創建 Distribution 後,新增一組新的 behavior
Path Pattern 為 '/2023/static/*',
CachePolicy: CachingOptimized
  1. 設置 DNS 紀錄,將 2023ironman-watch.kgg23.com 對應 CNAME 到這個 CF Distribution(d15kpj4cnphd3.cloudfront.net)
  2. 等待各項設置生效!

<<驗證>>

  1. 我們接連連上兩個網址,看是否都能正常運作。
  1. 一樣開啟 Developer Tools,看載入的資料有無差異,Developer Console 也沒有發現錯誤。
    https://ithelp.ithome.com.tw/upload/images/20230912/20162502aKS0rIFsz7.png
  2. Wow,看起來真不錯!
    相關改善有:
  • FCP(First Contentful Paint)[1] 從 1.5秒 --> 0.9秒
  • 載入請求所需的流量從 1.2M --> 431 KB
  • $$ 的節省。S3 定價資訊 v.s. CF 定價資訊。單價相同但流量不同。
S3 在 ap-northeast-1 的流量費用是 $0.114 per GB
CF 在 ap-northeast-1 的流量費用是 $0.114 per GB 
單價不變,但流量節省 (1.2*1,024 KB v.s. 432 KB),流量費用 降低為 35.2% (或26%)[2]

<<結論>>
在這個例子中,相信大家 CloudFront 帶來了更快的網頁呈現 + 更划算的價格,好服務,不用嗎?
希望從這裡開始,大家多多利用 CDN,多多使用 CloudFront

更新,鐵人賽觀賽區「不是」由 iTHome 提供的功能,所以不需要喊話主辦單位

## 喊話主辦單位: 要不要參考一下? 等你呦

[1] FCP - https://web.dev/fcp/
[2] 432/1200 = 35.2%,實際上還可以扣除 google fonts + google tag manager 相關流量,僅計算 s3 對外 v.s. 該 distribution 對外。
google fonts css: 66.8 KB
google tag manager: 85.3KB,兩者合計約 152 KB
(432- 152) / (1.2*1024 - 152) = 280 / 1384 = 26%


因為還是 iT邦幫忙的新手,不能直接在留言「回應」,將相關回覆更新在這

能夠釣出大神,實在太好啦!

感謝大神與我們分享您的相關作法 & 這頁面(觀賽區) 的由來。

對 Java 有興趣的朋友,也歡迎一起來看這次的短片:
《Java 幼幼班》


上一篇
Day 08 - 聽說可以直接拿 S3 當源站,該怎麼做?
下一篇
Day 10 - 我可以控制 CloudFront 中的檔案可以用多久嗎?
系列文
2023 年了,一起來學 CDN - 你也可以瞭解的 CloudFront 30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

2 則留言

1
qrtt1
iT邦新手 4 級 ‧ 2023-09-12 11:44:49

素偶!

觀賽看版不是《ITHOME 鐵人賽》的一部分呦,那是作為 Java 社群的宣傳需求,搭配興趣而建立起來的 side project。

社群宣傳的需求

由於每年的 ITHome 鐵人賽恰好會在 JCConf 之前,再加 Facebook 的宣傳效果被同溫層所限制,我只好另行出路來做不同的宣傳試驗。有別於 JCConf 內部的文宣組,在 JCConf 粉絲團與 TWJUG 社團中宣傳,需要另外一條阻礙最小的道路。

在過去有不同的實驗,只要「有幫助的內容,遠大於要宣傳的內容」多數的 PO 文規範都可以通過的。像以前比較有閒的時候,會特別寫一些還算實用的文章,來作為宣傳之用。像是:

https://www.facebook.com/groups/616369245163622/?multi_permalinks=2492986387501889&hoisted_section_header_type=recently_seen

https://ithelp.ithome.com.tw/upload/images/20230912/20058822tja5GM6FsD.png

https://www.ptt.cc/bbs/Soft_Job/M.1633615481.A.A27.html

https://ithelp.ithome.com.tw/upload/images/20230912/20058822pf3wnyvi39.png

透過「比例原則」來穿透規範,但這樣做雖然可行。要花費的力量太大了,面對的社群也較為特定不適合作為「跨出同溫層」的材料。

ITHOME 鐵人賽看版的雛型

而觀賽看版本來也不是作為 JCConf 宣傳材料的一部分,最初它只是作為自己為了觀察有哪些好文章的迷你 bot。但某一次也是用製作的內容來寫了文章,而開始想要「回收再利用」:

活動錄影
https://youtu.be/gxczmj1Dsnk?si=uYvrSIYdUvEoQxHO

講稿大綱
https://www.notion.so/ITHOME-5888e9f5104e4793afb951f4f7ce49e5?pvs=4

個人興趣 + 社群宣傳

ITHOME 鐵人賽豐富的題目很適合作為「跨越同溫層」的材料,運用這個材料可以在更多的社團、社群中發起話題,也間接地宣傳接下來要舉辦的 JCConf ( 歡迎來參觀一下今年的 JCConf 官網 https://jcconf.tw/2023/ )

不知不覺這個觀賽看板在朋友圈中,成為一些人每年期望會相見的事物。雖然,它是個小眾的個人興趣,但每年做著做著都可以加一些新的想法或新的試驗,就像是一個個人無限的小型研究專題,探索著自己的興趣還有想要累積的成果。

儘管它不是一個「賺錢」的興趣,去年倒是有想要「買 domain name 接上 cloudflare」的衝動,但想了想這東西也沒有量到可以插廣告,實在不值得投入太多,就讓他維持純粹的興趣好了。

今年除了維持之餘,也試了新的「短片」系列,做了《Java 幼幼班》系列,也歡迎大家來看看 :D

https://www.youtube.com/watch?v=5WJxhmDg9TM&list=PLRle6wVrCU6P7RtbWeeCEvl_BhkLUOc7x&ab_channel=TWJUG%E9%81%8A%E6%88%B2%E5%A0%B4

https://ithelp.ithome.com.tw/upload/images/20230912/20058822qHJp3xVoKZ.jpg

1
Kgg23
iT邦新手 5 級 ‧ 2023-09-12 14:24:52

(我總算 5級了,555~ )

能夠釣出大神,實在太好啦!
感謝大神與我們分享您的相關作法 & 這頁面(觀賽區) 的由來。

對 Java 有興趣的朋友,也歡迎一起來看這次的短片:
《Java 幼幼班》

我要留言

立即登入留言